// Description: 描述
package xtime

import "time"

// 计算某周还剩多少秒
// offset 不传表示今周，负数表示往前offset周 整表示往后offset周
func WeekSurplusSec(offset ...int) int64 {
	t := time.Now()
	twDay := subAtZeroTime(func() time.Time {
		return WeekEndTime(offset...)
	}).AddDate(0, 0, 1)

	return int64(twDay.Sub(t).Seconds())
}

// 获取某周的开始时间
// offset 不传表示今周的，负数表示往前offset周的 整表示往后offset周的
func WeekStartTime(offset ...int) time.Time {
	n := TodayStartTime()

	offsetDay := int(time.Monday - n.Weekday())
	if offsetDay == 1 {
		offsetDay = -6
	}

	if len(offset) > 0 {
		offsetDay += offset[0] * 7
	}

	if offsetDay == 0 {
		return n
	}

	return n.AddDate(0, 0, offsetDay)
}

// 获取某周的结束时间
// offset 不传表示今周的，负数表示往前offset周的 整表示往后offset周的
func WeekEndTime(offset ...int) time.Time {
	n := TodayEndTime()

	offsetDay := int(time.Sunday - n.Weekday() + 7)

	if len(offset) > 0 {
		offsetDay += offset[0] * 7
	}

	if offsetDay == 0 {
		return n
	}

	return n.AddDate(0, 0, offsetDay)
}
